import { Color, RBNode } from "./types";

/**
 * 给节点染成指定的颜色
 * @param node 
 * @param color 
 */
export const color = <T>(node: RBNode<T> | null, color: Color) => {
    if (node !== null) {
        node.color = color
    }
    return node
}

/**
 * 给节点染成红色
 * @param node 
 */
export const red = <T>(node: RBNode<T> | null) => {
    color(node, Color.RED)
}

/**
 * 给节点染成黑色
 * @param node 
 */
export const black = <T>(node: RBNode<T> | null) => {
    color(node, Color.BLACK)
}



/**
 * 获取节点的颜色
 * @param node 
 */
export const colorOf = <T>(node: RBNode<T> | null) => {
    // 如果是空，默认是黑色(红黑树空的节点默认就是黑色)
    return node === null ? Color.BLACK : node.color
}

/**
 * 判断节点是不是黑色
 * @param node 
 */
export const isBlack = <T>(node: RBNode<T> | null) => {
    // 如果是空，默认是黑色(红黑树空的节点默认就是黑色)
    return colorOf(node) === Color.BLACK
}

/**
 * 判断节点是不是红色
 * @param node 
 */
export const isRed = <T>(node: RBNode<T> | null) => {
    // 如果是空，默认是黑色(红黑树空的节点默认就是黑色)
    return colorOf(node) === Color.RED
}






